/******************************************************************************/
/*!
\file   System.hpp
\author David Seah Seng Chong
\par    email: sengchong.seah\@digipen.edu
\par    DigiPen login: sengchong.seah
\par    Course: GAM200
\date   21/10/2011
\brief
    Header file
    System

    Copyright (C) 2011 DigiPen Institute of Technology.
    Reproduction or disclosure of this file or its contents without the
    prior written consent of DigiPen Institute of Technology is prohibited.
*/
/******************************************************************************/
#ifndef SYSTEM_HPP
#define SYSTEM_HPP


#include <iostream>
#pragma comment(linker, "/subsystem:\"console\" /entry:\"WinMainCRTStartup\"")


#define SYSTEM System::GetSystem()


class Renderer;
class Window;

class System
{
    public:

    static System * GetSystem();
    static void DeleteSystem();

    bool Initialize();
    void Update();
    void Shutdown();
    Window * GetWindow();
    Renderer* GetRenderer();
    

    bool IsGameActive() const;
    void EndGame();

	int GetWindowWidth() const;
    int GetWindowHeight() const;

    private:
    System();
    ~System() {}

    System(const System&);
    System& operator= (const System&);

    int m_windowWidth;
    int m_windowHeight;

    Window * m_Window;
    Renderer * m_Renderer;

	//Singleton Design
	static System * s_system;


}; //class System

#endif